package org.jeecg.modules.cascv.image.timeTask;

import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.HexUtil;
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.modules.cascv.image.util.LaptopConstant;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import javax.imageio.ImageIO;
import javax.imageio.stream.ImageInputStream;
import javax.imageio.stream.MemoryCacheImageInputStream;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
import java.util.Calendar;
import java.util.Date;
import java.util.concurrent.atomic.AtomicInteger;

/**
 * @author贺弘烨
 * @Version 2022/3/21
 * description;
 * 定时删除任务 定时删除文件夹中生产的图片数据
 */
@Component
@Slf4j
public class TimeTask {
//    public static void main(String[] args) {
//        File dir = new File("D:\\data\\");
//        Date date1 = new Date();
//        Calendar calendar = Calendar.getInstance(); //得到日历
//        calendar.setTime(date1);//把当前时间赋给日历
//        calendar.add(calendar.DATE, -1); //设置为前前一天，可根据需求进行修改
//        Date date2 = calendar.getTime();//获取前一天的时间
//        //转换成时间戳
//        long t1 = date2.getTime();
//        try {
//            File[] files = dir.listFiles();
//            for (int i = 0; i < files.length; i++) {
//                //获取文件路径
//                String filePath = files[i].getCanonicalPath();
//                //获取文件最后一次被修改的时间
//                Long lastTime = files[i].lastModified();
//                if (lastTime < t1) {
//                    //判断文件是否存在和是否是一个标准文件
//                    if (files[i].exists() && files[i].isFile()) {
//                        File file = new File(filePath);
//                        //删除
//                        file.delete();
//                    }
//                }
//            }
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//            }


    /**
     * 删除指定目录中的所有子文件或子目录
     * @param dir
     */
    public static void del(File dir){
        Date date1 = new Date();
        Calendar calendar = Calendar.getInstance(); //得到日历
        calendar.setTime(date1);//把当前时间赋给日历
        calendar.add(calendar.DATE, -1); //设置为前前一天，可根据需求进行修改
        Date date2 = calendar.getTime();//获取前一天的时间
        //转换成时间戳
        long t1 = date2.getTime();
        try {
            File[] files = dir.listFiles();
            for (int i = 0; i < files.length; i++) {
                //获取文件路径
                String filePath = files[i].getCanonicalPath();
                //获取文件最后一次被修改的时间
                Long lastTime = files[i].lastModified();
                if (lastTime < t1) {
                    //判断文件是否存在和是否是一个标准文件
                    if (files[i].exists() && files[i].isFile()) {
                        File file = new File(filePath);
                        //删除
                        file.delete();
                    }
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    // 删除文件 或者 清除文件夹下的所有文件
    public static void deleteFile(String filePath)
    {
        File file = new File(filePath);
        if (file.isFile())  //判断是否为文件，是，则删除
        {
            file.delete();
        }
        else //不为文件，则为文件夹
        {
            String[] childFilePath = file.list();//获取文件夹下所有文件相对路径
            for (String path:childFilePath)
            {
                deleteFile(file.getAbsoluteFile()+"/"+path);//递归，对每个都进行判断
            }
            //file.delete(); // 如果不保留文件夹本身 则执行此行代码
        }

    }

    @Scheduled(cron = "0 0 12 * * ?")//定时任务注解
    public void clearrandomnum() {
        System.out.println("定时删除图片任务开启！");
//    File dir = new File("\\data\\images\\");
//      del(dir);
        deleteFile("\\data\\images");
    }

    public static void main(String[] args) {
        // 删除文件 或者 清除文件夹下的所有文件

            File file = new File("D:\\data\\images"); //D:\logs    E:\data\product   D:\data\images
            if (file.isFile())  //判断是否为文件，是，则删除
            {
                file.delete();
            }
            else //不为文件，则为文件夹
            {
                String[] childFilePath = file.list();//获取文件夹下所有文件相对路径
                for (String path:childFilePath)
                {
                    deleteFile(file.getAbsoluteFile()+"/"+path);//递归，对每个都进行判断
                }
                //file.delete(); // 如果不保留文件夹本身 则执行此行代码
            }

    }
}









//每隔5秒执行一次：            @Scheduled(cron = "*/5 * * * * ?")
//每隔1分钟执行一次：           @Scheduled(cron = "0 */1 * * * ?")
//每天23点执行一次：           @Scheduled(cron = "0 0 23 * * ?")
//每天凌晨1点执行一次：          @Scheduled(cron = "0 0 1 * * ?")
//每月1号凌晨1点执行一次：      @Scheduled(cron = "0 0 1 1 * ?")
//每月最后一天23点执行一次：     @Scheduled(cron = "0 0 23 L * ?")
//每周星期天凌晨1点实行一次：     @Scheduled(cron = "0 0 1 ? * L")
//在26分、29分、33分执行一次：     @Scheduled(cron = " 0 26,29,33 * * * ?")
//每天的0点、13点、18点、21点都执行一次：  @Scheduled(cron = " 0 0 0,13,18,21 * * ?")


//    final String[] lastVideoStr = {null};
//    final Long[] lastOffset = {0L};
////取关键帧
//        try {
//                parser.forEach(path, cs, new Consumer<Line>() { // 可以快速读取文件
//@Override
//public void accept(Line line) {
//        if (line.getLength() <= 100) {
//        return;
//        }
//        JSONObject dataItem = null;
//        try {
//        dataItem = JSON.parseObject(line.getContent().toString());
//        } catch (Exception e) {
//        return;
//        }
//        dataItem = dataItem.getJSONObject("Content");
//        //A1_VGR_MICU_APP14DATA_20_2021_1
//        System.out.println("idsName = " + idsName);
//        String videoStr = dataItem.getString("A1_VGR_MICU_APP14DATA_20_2021_1");//todo
//        videoStr = StringUtils.substring(videoStr, 7, videoStr.length() - 10);
//        if (lastVideoStr[0] == null) {
//
//        } else {
//        String ss = lastVideoStr[0] + videoStr;
//        int headerIndex = ss.indexOf("000001"); //每一帧的帧头为0000001
//        if (headerIndex < 0) {
//        return;
//        }
//        String typeStr = ss.substring(headerIndex + 6, headerIndex + 8);//找一个字节转为16进制
//        int type = Integer.parseUnsignedInt(typeStr, 16);
//        type = type & 0x1f; //取后四位 取出值 判断它的类型是多少
//        System.out.println("typeStr=" + typeStr + ",type=" + type);
//        if (type == 7 || type == 8 || type == 5) { //如果是 5，7，8就是一个关键帧
//        System.out.println(version + "找到I帧" + lastOffset[0]);
//        LaptopConstant.offsetMap.put(key + "#" + userId + "#" + version, lastOffset[0]);
//        throw new RuntimeException("找到I帧" + lastOffset[0]);
//        }
//        }
//        lastVideoStr[0] = videoStr;
//        lastOffset[0] = line.getOffset();
//        }
//        }
//        });
//        } catch (Exception e) {
//        }
